﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Web.Util;
using System.Collections;

namespace HelpDesk
{
    public partial class PantallaSeguimiento : System.Web.UI.Page
    {
        int idEmpleado;
        bool opcionEsEmpleado;
        int idFlujo;

        private void MostrarLoqueseDebe()
        {
            if (string.Compare(ddlOpcion.SelectedValue.ToString(), "Empleado")==0)
            {
                lblEmpleado.Visible = true;
                ddlEmpleado.Visible = true;
                btnBuscarEmpleado.Visible = true;
                ddlFlujos.Visible = false;
                lblDescripcionFlujo.Visible = false;
                lblDescripcionFlujo0.Visible = false;
                LlenarDDLEmpleado();
                lblErrorDDLOpcion.Text = "";
                opcionEsEmpleado = true;
                lblEstadoAvance.Visible = false;
                txtPorcentajeAvance.Visible = false;
                txtPorcentajeAvance0.Visible = false;
                lblPasos.Visible = false;
                lblEncabezado.Visible = false;
                lbDescripcion.Visible = false;
                lblAcertivo.Text = "";
            }
            if (string.Compare(ddlOpcion.SelectedValue.ToString(), "Flujo") == 0)
            {
                LlenarDDLFlujos();
                ddlFlujos.Visible = true;
                lblEmpleado.Visible = false ;
                ddlEmpleado.Visible = false;
                btnBuscarEmpleado.Visible = true;
                lblTituloIncidencaia1.Visible = true;
                lblTituloIncidencaia2.Visible = false;
                lblTituloIncidencia.Visible = true;
                lblDescripcionIncidencia.Visible = true;
                lblDescripcionFlujo.Visible = true;
                lblDescripcionFlujo0.Visible = true;
                txtNoIncidenciasCola.Visible = false;
                txtDescripcionIncidencia.Visible = true;
                lblErrorDDLOpcion.Text = "";
                opcionEsEmpleado = false;

            }
            if (string.Compare(ddlOpcion.SelectedValue.ToString(), "") == 0)
            {
                lblErrorDDLOpcion.Text = "Seleccione una opcion de consulta";
            }
 
        }
        protected void btnAceptarOpcion_Click(object sender, EventArgs e)
        {
            limpiar();
            MostrarLoqueseDebe();
        }
        private void LlenarDDLEmpleado()
        {
            QueryBuilder objBusca_Empleado = new QueryBuilder();
            QueryBuilder objBuscaIDEmpleado = new QueryBuilder();
            DataTable tbResultadoEmpleado = new DataTable();
            DataTable tbResultadoIDempleado = new DataTable();

            string sqlbuscaEmpleado = "SELECT usuario_encargado FROM asig_paso_flujo where fecha_culminado is null";
            tbResultadoEmpleado = objBusca_Empleado.EjecutarQuery(sqlbuscaEmpleado);
            for (int i = 0; i < tbResultadoEmpleado.Rows.Count; i++)
            {
                ddlEmpleado.Items.Add(tbResultadoEmpleado.Rows[i].ItemArray[0].ToString());
            }
        }
        private void LlenarDDLFlujos()
        {
            QueryBuilder objBusca_Flujo = new QueryBuilder();
            DataTable tbResultadoFlujos = new DataTable();
            string sqlBuscaFlujo = "select distinct flujo.id_flujo, flujo.descripcion_flujo from flujo inner join asig_paso_flujo on flujo.id_flujo = asig_paso_flujo.flujo where flujo.paso = 1";
            tbResultadoFlujos = objBusca_Flujo.EjecutarQuery(sqlBuscaFlujo);
            for (int i = 0; i < tbResultadoFlujos.Rows.Count; i++)
            {
                 ddlFlujos.Items.Add(tbResultadoFlujos.Rows[i].ItemArray[1].ToString());
            }
            
        }
        /// <summary>
        /// Buscar la incidencia segun el usuario seleccionado.
        /// </summary>
        private void IncidenciaQEmpleadoEstaTrabajando()
        {
            QueryBuilder objBuscaIncidencia = new QueryBuilder();
            DataTable tbResultadoIncidencia = new DataTable();
            string sqlincidencia = "select ticket.id_ticket, ticket.ticket_desc " +
                "from ticket inner join problema on ticket.problema = problema.id_problema " +
                "inner join flujo on flujo.problema = ticket.problema " +
                "inner join asig_paso_flujo on asig_paso_flujo.flujo = flujo.id_flujo " +
                "where asig_paso_flujo.usuario_encargado = '" + ddlEmpleado.SelectedValue.ToString() +
                "'and ticket.status = 'ASG' and rownum < 2";
            tbResultadoIncidencia = objBuscaIncidencia.EjecutarQuery(sqlincidencia);
            lblIDIncidencia.Text = tbResultadoIncidencia.Rows[tbResultadoIncidencia.Rows.Count -1].ItemArray[0].ToString();
            txtDescripcionIncidencia.Text = tbResultadoIncidencia.Rows[tbResultadoIncidencia.Rows.Count -1].ItemArray[1].ToString();
            if (tbResultadoIncidencia.Rows.Count == 0)
            {
                lblErrorDDLEmpleado.Text = "El usuario no esta trabajando una incidencia";
            }
            else
            {
                lblTituloIncidencaia1.Visible = true;
                lblTituloIncidencaia2.Visible = true;
                lblTituloIncidencia.Visible = true;
                lblDescripcionIncidencia.Visible = true;
                txtNoIncidenciasCola.Visible = true;
                txtDescripcionIncidencia.Visible = true;
                lblErrorDDLEmpleado.Text = "";
 
            }

            
        }
        /// <summary>
        /// Buscar Incidencias en cola, con status ENC.
        /// </summary>
        private void IncidenciasEnCola()
        {
            QueryBuilder objBuscaIncidenciaENC = new QueryBuilder();
            DataTable tbResultadoIncidenciaENC = new DataTable();
            string sqlIncidenciasCola = "select count (ticket.status) from ticket where ticket.status = 'ENC'";
            tbResultadoIncidenciaENC = objBuscaIncidenciaENC.EjecutarQuery(sqlIncidenciasCola);
            txtNoIncidenciasCola.Text = tbResultadoIncidenciaENC.Rows[tbResultadoIncidenciaENC.Rows.Count - 1].ItemArray[0].ToString();


        }
        protected void btnBuscarEmpleado_Click(object sender, EventArgs e)
        {
            if (string.Compare(ddlOpcion.SelectedValue.ToString(), "Empleado") == 0)
            {
                IncidenciaQEmpleadoEstaTrabajando();
                IncidenciasEnCola();
                lblDescripcionFlujo0.Visible = false;
                lblIDFlujo.Visible = false;
            }
            else
            {
                BuscarIDFlujo();
                ObtenerIncidencia();
                lblDescripcionFlujo0.Visible = true;
                lblIDFlujo.Visible = true;
                lbDescripcion.Items.Clear();
                obtenerPasosyPonerListbox();
 
            }
        }

        private void BuscarIDFlujo()
        {
            QueryBuilder objBusca_Flujo = new QueryBuilder();
            DataTable tbResultadoFlujos = new DataTable();
            string sqlBuscaFlujo = "select flujo.id_flujo from flujo inner join"
            + " asig_paso_flujo on flujo.id_flujo = asig_paso_flujo.flujo where "
            + " flujo.descripcion_flujo = '" + ddlFlujos.SelectedValue.ToString() +"' and rownum <2";
            tbResultadoFlujos = objBusca_Flujo.EjecutarQuery(sqlBuscaFlujo);
            idFlujo = Convert.ToInt32(tbResultadoFlujos.Rows[tbResultadoFlujos.Rows.Count - 1].ItemArray[0].ToString());
            lblIDFlujo.Text = idFlujo.ToString();
            if (tbResultadoFlujos.Rows.Count == 0)
            {
                lblErrorDDLEmpleado.Text = "";
            }
            else
            {
                lblEstadoAvance.Visible = true;
                txtPorcentajeAvance.Visible = true;
                txtPorcentajeAvance0.Visible = true;
                lblPasos.Visible = true;
                lblEncabezado.Visible = true;
                lbDescripcion.Visible = true;
            }
 
        }
        private void ObtenerIncidencia()
        {
            QueryBuilder objBuscaIncidencia = new QueryBuilder();
            DataTable tbResultadoIncidencia = new DataTable();
            string sqlBuscaFlujo = "select id_ticket, ticket_desc from flujo_ticket inner join "
            + " asig_paso_flujo  on flujo_ticket.id_flujo = asig_paso_flujo.flujo inner join "
            + "ticket on flujo_ticket.id_ticket = ticket.id_ticket where asig_paso_flujo.flujo =" + idFlujo;
            tbResultadoIncidencia = objBuscaIncidencia.EjecutarQuery(sqlBuscaFlujo);

            lblIDIncidencia.Text = tbResultadoIncidencia.Rows[tbResultadoIncidencia.Rows.Count - 1].ItemArray[0].ToString();
            txtDescripcionIncidencia.Text = tbResultadoIncidencia.Rows[tbResultadoIncidencia.Rows.Count - 1].ItemArray[1].ToString();
 
        }
        private void limpiar()
        {
            ddlEmpleado.Items.Clear();
            lblIDIncidencia.Text = "";
            txtDescripcionIncidencia.Text = "";
            txtNoIncidenciasCola.Text = "";
        }
        string listatiempos = "";
        private void obtenerPasosyPonerListbox()
        {
            //-----------PARTE DE OBTENER EL FLUJO Y PONERLO EN EL LISTBOX

            QueryBuilder objBusca_FLUJO = new QueryBuilder();
            DataTable tbResultadoConsulta3 = new DataTable();
            string sqlbuscaflujo = "SELECT FLUJO.PASO, FLUJO.DESCRIPCION_PASO, FLUJO.TIEMPO_EJECUCION, FLUJO.TIEMPO_EJECUTADO FROM FLUJO WHERE ID_FLUJO = " + idFlujo;
            tbResultadoConsulta3 = objBusca_FLUJO.EjecutarQuery(sqlbuscaflujo);
            decimal[] tiempoejecucion = new decimal[tbResultadoConsulta3.Rows.Count + 1];
            decimal[] tiempoejecutado = new decimal[tbResultadoConsulta3.Rows.Count + 1];
            decimal totaltiempoejecucion;
            decimal totaltiempoejecutado;
            for (int k = 0; k < tbResultadoConsulta3.Rows.Count; k++)
            {
                lbDescripcion.Items.Add(tbResultadoConsulta3.Rows[k].ItemArray[0].ToString().PadRight(5, '.')
                    + "| " + tbResultadoConsulta3.Rows[k].ItemArray[1].ToString().PadRight(75, '.')
                    + "| " + tbResultadoConsulta3.Rows[k].ItemArray[2].ToString());
                tiempoejecucion[k + 1] = decimal.Parse(tbResultadoConsulta3.Rows[k].ItemArray[2].ToString());
                if (string.Compare(tbResultadoConsulta3.Rows[k].ItemArray[3].ToString(),"")==0)
                {
                    tiempoejecutado[k + 1] = decimal.Parse(tbResultadoConsulta3.Rows[k].ItemArray[3].ToString() + "0");
                }
                else
                {
                    tiempoejecutado[k + 1] = decimal.Parse(tbResultadoConsulta3.Rows[k].ItemArray[3].ToString());
                }
            }
            totaltiempoejecucion = tiempoejecucion.Sum();
            totaltiempoejecutado = tiempoejecutado.Sum();
            txtPorcentajeAvance0.Text = "La incidencia tiene un tiempo de ejecucion de " + totaltiempoejecucion + " Horas y el tiempo que lleva ejecutado es de: " + totaltiempoejecutado + " Horas";
            decimal resultado = (totaltiempoejecutado / totaltiempoejecucion) * 100;
            if (resultado >= 100)
            {
                txtPorcentajeAvance.BackColor = Color.Red;
                txtPorcentajeAvance0.BackColor = Color.Red;
                txtPorcentajeAvance.ForeColor = Color.White ;
                txtPorcentajeAvance0.ForeColor = Color.White;
                lblAcertivo.Text = "La incidencia esta atrasada";
                lblAcertivo.ForeColor = Color.Red;
            }
            if (resultado < 100 && resultado >=80)
            {
                txtPorcentajeAvance.BackColor = Color.Yellow;
                txtPorcentajeAvance.ForeColor = Color.Black;
                txtPorcentajeAvance0.BackColor = Color.Yellow;
                txtPorcentajeAvance0.ForeColor = Color.Black;
                lblAcertivo.Text = "La incidencia esta por terminar";
                lblAcertivo.ForeColor = Color.Yellow;
            }
            if (resultado <80)
            {
                txtPorcentajeAvance.BackColor = Color.Green;
                txtPorcentajeAvance.ForeColor = Color.White;
                txtPorcentajeAvance0.BackColor = Color.Green;
                txtPorcentajeAvance0.ForeColor = Color.White;
                lblAcertivo.Text = "La incidencia esta a tiempo";
                lblAcertivo.ForeColor = Color.Green;
            }
            //txtPorcentajeAvance.Text = Convert.ToString(resultado).Substring(5,resultado.ToString().Length) + "%";
            string res = Convert.ToString(resultado);
            if (res.Length <= 5)
            {
                txtPorcentajeAvance.Text = res + "%";
            }
            else
            {
                txtPorcentajeAvance.Text = res.Remove(5) + "%";
            }
        }

        protected void lbDescripcion_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
